package core.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import util.DbUtils;

import core.dao.ProvinciaDao;
import core.model.Provincia;

/**
 * @author andoniibarguchilorenzo
 * clase que contiene los metodos implementados de la interface ProvinciaDao
 */
public class ProvinciaDaoImpl extends GenericDaoImpl<Provincia, Integer>
		implements ProvinciaDao {

	public List<Provincia> getAllProvincias() {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		List<Provincia> provincias = new ArrayList<Provincia>();
		try {
			ps = connection
					.prepareStatement("SELECT COD_PROVINCIA, NOMBRE, COD_RED, COD_GREEN, COD_BLUE FROM PROVINCIA ");

			ResultSet rs = ps.executeQuery();
			Provincia provincia = null;

			while (rs.next()) {
				provincia = Provincia.createProvincia(rs.getInt(1),
						rs.getString(2), rs.getInt(3), rs.getInt(4),
						rs.getInt(5));
				provincias.add(provincia);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return provincias;
	}

	public Provincia getProvincia(int red, int green, int blue) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		List<Provincia> provincias = new ArrayList<Provincia>();
		try {
			ps = connection
					.prepareStatement("SELECT COD_PROVINCIA, NOMBRE, COD_RED, COD_GREEN, COD_BLUE FROM PROVINCIA WHERE COD_RED = ? AND COD_GREEN = ? AND COD_BLUE = ?");
			ps.setInt(1, red);
			ps.setInt(2, green);
			ps.setInt(3, blue);

			ResultSet rs = ps.executeQuery();
			Provincia provincia = null;

			while (rs.next()) {
				provincia = Provincia.createProvincia(rs.getInt(1),
						rs.getString(2), rs.getInt(3), rs.getInt(4),
						rs.getInt(5));
				provincias.add(provincia);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			return provincias.get(0);
		} catch (java.lang.IndexOutOfBoundsException e) {
			System.out.println("cambiando de provincia...");
			return new Provincia();
		}
	}

	public int getCodigoProvincia(String nombre_provincia) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		int codigo = -1;
		try {
			ps = connection
					.prepareStatement("SELECT COD_PROVINCIA FROM PROVINCIA WHERE NOMBRE = ?");
			ps.setString(1, nombre_provincia);
			ResultSet rs = ps.executeQuery();

			codigo = rs.getInt(1);

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return codigo;

	}
}
